# 定义一个变量用于存储 Git Commit Hash
set(GIT_COMMIT_HASH "unknown") # 默认值

# 查找 Git 命令
find_program(GIT_EXECUTABLE NAMES git)

if(GIT_EXECUTABLE)
    # 如果找到了 Git，执行命令获取哈希
    execute_process(
        COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} # 在源代码根目录执行 git 命令
        OUTPUT_VARIABLE GIT_HASH_OUTPUT # 捕获标准输出
        RESULT_VARIABLE GIT_EXEC_RESULT # 捕获退出码
        OUTPUT_STRIP_TRAILING_WHITESPACE # 移除末尾空白字符
        ERROR_QUIET # 不输出标准错误到控制台
    )

    # 检查命令是否成功执行 (退出码为 0)
    if(GIT_EXEC_RESULT EQUAL 0)
        set(GIT_COMMIT_HASH "${GIT_HASH_OUTPUT}")
        message(STATUS "Current Git Commit Hash: ${GIT_COMMIT_HASH}")
    else()
        message(WARNING "Failed to get Git Commit Hash. Is this a Git repository? git command output: ${GIT_HASH_OUTPUT}")
        # GIT_COMMIT_HASH 保持为默认值 "unknown"
    endif()
else()
    message(WARNING "Git executable not found. Cannot get Git Commit Hash.")
    # GIT_COMMIT_HASH 保持为默认值 "unknown"
endif()

# 现在 GIT_COMMIT_HASH 变量包含了获取到的哈希值或默认值

# 可以将这个哈希值作为编译定义传递给你的 Target
# 例如，定义一个宏 MY_APP_GIT_COMMIT_HASH
add_definitions("-DMY_APP_GIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"")

# 或者将哈希值写入一个头文件 (需要 add_custom_command 或 configure_file)
# configure_file(
#     "${CMAKE_CURRENT_SOURCE_DIR}/version_config.h.in"
#     "${CMAKE_CURRENT_BINARY_DIR}/version_config.h"
#     @ONLY
# )
#
# version_config.h.in:
# #define MY_APP_GIT_COMMIT_HASH "@GIT_COMMIT_HASH@"
#
# 然后将 ${CMAKE_CURRENT_BINARY_DIR} 添加到 include_directories